A programmable logic controller (PLC) is a specialized automation device used in industrial environments. PLCs are configured to execute software which continuously gathers data on the state of input devices to control the state of output devices. A PLC typically includes three major components: a processor (which includes volatile memory), non-volatile memory comprising an application program, and input/output (I/O) ports for connecting to other devices in the automation system.
One of the challenges of effectively operating and maintaining PLCs is that, traditionally, these systems have been very inflexible. In particular, it is difficult to modify the behavior and operation of PLCs once they have been installed and configured. The lack of flexibility in PLCs generally, restricts the level of customization that the device owner can perform. For example, a device owner may purchase several PLCs programmed to perform certain functionality. Over time, the device owner may wish to modify or extend that functionality, based on the needs of the owner's business, as well as other new or changing customer demands. With conventional systems, device specialists (e.g., engineers) must redesign the device software to perform the desired functionality. Then, installation of the redesigned software on the PLC requires the PLC to be stopped, updated, and restarted. This approach to software changes can be costly, as factory operations may need to be temporarily halted until the update is complete.